home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / internet / irc_i_dodatki / remotecli / remotecli.amirx next >
Text File  |  1997-02-06  |  25KB  |  882 lines

  1. /*
  2.    ABOUT:
  3.    This is a test of my ability to make a bot using both AmIRC and
  4.       the ARexx scripting language.
  5.    
  6.    Basicly, what we have here is a remotecli and thus the name. 
  7.  
  8.         To use it, tell your buddy to /msg <yournick> <cli command>
  9.  
  10.    INSTALLATION:
  11.  
  12.    Put this file into your Amirc/rexx directory otherwise known as
  13.    PROGDIR:rexx directory.
  14.  
  15.    then from within amirc type 
  16.  
  17.         /rx remotecli install
  18.  
  19.    or if you would like the script to run/accessed from ram: then from
  20.    within amirc type 
  21.  
  22.         /rx remotecli install ram
  23.  
  24.    it will then setup everything for you.
  25.  
  26.  
  27.    INSTALLATION IS NOW DONE.
  28.  
  29.    Now reload your default settings using either the menu command under
  30.    Settings or reload Amirc.  <--- Last option is more reliable.
  31.  
  32.    For a list of switches type  /rc help                within amirc
  33.    for a list of commads type   /msg <yournick> help    within amirc
  34.    to setup a virtual device do /rc set <dirpath> <access level> <virtual device:>
  35.                <add/remove>
  36.  
  37.    ie...   To setup s: as your scripts: device do the following
  38.       /rc set s: 100 scripts: add
  39.       To get rid of it do
  40.       /rc set s: 100 scripts: remove
  41.  
  42.    For additional help on commands/switches just do /rc <command>
  43.  
  44.    CONTACT INFORMATION:
  45.  
  46.    rlamb@mcia.com
  47.    rlamb@lcc.net
  48.    dude3k on #amiga_warez
  49.  
  50.    HISTORY:
  51.  
  52.    Prior to first public beta release 9 months of aggressive programming
  53.    and learning of arexx for both the language itself and under the 
  54.    Amirc environment. Also includes aggressive testing of code for flood
  55.    stability, and lots of virtual and security functions.
  56.  
  57.    Tuesday Feb. 4, 1997         Fixed quirk on adding virtual devices
  58.                     - if you left out a colon it'd still
  59.                 - add the device, however the rest of
  60.                 - the script wants a colon
  61.                 - so I added a patch to rectify the
  62.                 - situation
  63.   
  64.    Wednesday Feb. 5, 1997       Problem in cd command detected and fixed
  65.                 - invalid usage of rexx functions
  66.                 - prevented cd'ing into subdirs
  67.                 Detected problem in virtuallookup()
  68.                 - Problem fixed.
  69.                 - Function now verifies against
  70.                 - security level as well
  71.                 -- This allows other axxs levels
  72.                 -- to have the same name for their
  73.                 -- virtual device names.
  74.    
  75.    Thursday Feb. 6, 1997        Added option to installation procedure
  76.                 - allows user to have remotecli installed
  77.                 - to ram:
  78.                 - Benefits are that you will not see
  79.                 - access light flicker everytime the 
  80.                 - file get accessed. Also, script loads
  81.                 - much faster and parses faster thereof.
  82.                 Added more info to directory function
  83.                 - now returns file sizes
  84. */
  85.  
  86. /* SIGNAL ON SYNTAX */
  87.  
  88. if ~show('l','rexxsupport.library') then
  89.   if ~addlib('rexxsupport.library',0,-30,0) then do
  90.     lecho("You don't have rexxsupport.library in your libs:")
  91.     exit
  92. end
  93. if ~show('l','rexxsyslib.library') then
  94.   if ~addlib('rexxsyslib.library',0,-30,0) then do
  95.     lecho("You don't have rexxsyslib.library in your libs:")
  96.         exit
  97. end
  98. d = 0
  99. c = 0
  100. options results
  101. x=getclip(server)
  102. if x='' then setclip(server,'0')
  103. x=getclip('localecho')
  104. if x='' then setclip('localecho','on')
  105. GETMYNICK
  106. mynick=RESULT
  107. parse arg rest
  108. parse var rest lcom lrest
  109. check=upper(lcom)
  110. if lcom='CTCP' then do
  111.  rest=lrest
  112. end
  113. parse var rest ":"nick"!"username"@"crap"."domain" "method" "rawcommand
  114. parse var rawcommand ":"processed
  115. if lcom='CTCP' then setclip(nick'ctcp','on')
  116. if c2d(substr(processed,1,1))=1 then 
  117.  processed=strip(processed,'b',substr(processed,1,1))
  118. if username='' then nick="LOCAL"    /* no username, it must be local */
  119. /* setup the currentdir for each nick */
  120. test=getclip(nick'cd')
  121.  
  122. if test='' then do
  123.   setclip(nick'cd','root:')
  124. end
  125.  
  126. select
  127.   when check="HELP" then switchhelp()
  128.   when check="ECHO" then localecho(lrest)
  129.   when check="STAT" then status()
  130.   when check="CLEAR" then clear()
  131.   when check="SET" then  setup(lrest)
  132.   when check="INSTALL" then install(lrest)
  133.   when check="LIST" then list()
  134.   when check="NICK" then nicksecure(lrest)
  135.   otherwise nop
  136. end
  137. parse var processed command rest
  138. select
  139.    when upper(command)="DIR" then directory(rest)
  140.    when upper(command)="CD" then  changedir(rest)
  141.    when upper(command)="MORE" then more(rest)
  142.    when upper(command)="HELP" then help()
  143.    when upper(command)="SEND" then sendfile(rest)
  144.    when upper(command)="QUIT" then quit()
  145.    when upper(command)="XDCC" then help()
  146.    otherwise exit
  147. end
  148. /* restore_variables()        not needed */
  149. exit
  150.  
  151. setprocess:
  152. test=getclip(nick'process')
  153. if test='' then do
  154.     setclip(nick'process',1)
  155.     currentprocess=1
  156. end
  157. else do
  158.    test=test+1
  159.    currentprocess=test
  160.    setclip(nick'process',test)
  161. end
  162. return 0
  163.  
  164. restore_variables:
  165.     if temp.localecho~='' then setclip('localecho',temp.localecho)
  166. return 0
  167.  
  168. list:
  169. setprocess()
  170. lecho("Current scan settings are: ")
  171. more("s:remotecli","override")
  172. lecho("Scan list complete......")
  173. return 0
  174.  
  175. setup:
  176. setprocess()
  177. parse arg dest level virtual option .
  178. if option=''|level='' then do
  179.   lecho("Usage: /rc set <path> <access level> <virtual device> <add/remove>")
  180.   return 0
  181. end
  182. if showdir(dest)='' then do
  183.    lecho(dest" is not a valid directory.") 
  184.   end
  185. else do
  186.   if upper(option)="ADD" then do
  187.    if exists("s:remotecli") then open('file_io','s:remotecli','a')
  188.    else open('file_io','s:remotecli','w')
  189.    if right(virtual,1)=':' then
  190.       writeln('file_io',dest' 'level' 'virtual)
  191.    else
  192.       writeln('file_io',dest' 'level' 'virtual':')
  193.    close('file_io')
  194.    lecho("Directory ["dest"] at level ["level"] added")
  195.    lecho("Linked to virtual device: "virtual)
  196.   end
  197.   else do
  198.     if upper(option)="REMOVE" then do
  199.       if ~exists("s:remotecli") then lecho("There is nothing to remove!")
  200.       else do
  201.     open('file_io','s:remotecli','r')
  202.         open('file_temp','s:remotecli.tmp','w')
  203.         do until eof('file_io')
  204.           input=readln('file_io')
  205.           parse upper var input olddest oldlevel .
  206.           if upper(dest)=oldest & upper(level)=oldlevel then nop
  207.           else do
  208.          writeln('file_temp',input)
  209.           end
  210.         end
  211.         close('file_temp')
  212.         close('file_io')
  213.         delete('s:remotecli')
  214.         rename('s:remotecli.tmp','s:remotecli')
  215.         lecho("Directory ["dest"] at level ["levl"]removed.")
  216.       end
  217.     end
  218.   end
  219.   else do
  220.     lecho("You must specify an option of either ADD or REMOVE.")
  221.   end 
  222. end
  223. return 0
  224.  
  225. status:
  226. setprocess()
  227. bigfatlist=show('c')
  228. x=words(bigfatlist)
  229.  lecho("Variables in system are:")
  230.  lecho("========================")
  231.  lecho("Variable           Value")
  232.  lecho("========================")
  233. do i=1 to x
  234. variable=word(bigfatlist,i)
  235. value=getclip(variable)
  236.  lecho(variable"<-+")
  237.  lecho(fillspace(variable)"  +->"value)
  238. end
  239. return 0
  240.  
  241. clear:
  242.   bigfatlist=show('c')
  243.   x=words(bigfatlist)
  244.   "echo P="d2c(27)"b!RemoteCli! Making Memory"
  245.   dummy=0
  246.   if x~=0 then do
  247.   do i=1 to x
  248.     currentword=word(bigfatlist,i)
  249.     z1=index(currentword,'cd')
  250.     z2=index(currentword,'home')
  251.     z3=index(currentword,'process')
  252.     z=z1 + z2 + z3
  253.     if z>0 then do
  254.       dummy=dummy+length(currentword)+length(getclip(currentword))
  255.       setclip(currentword)
  256.     end
  257.   end
  258.   end
  259.   "echo P="d2c(27)"b!RemoteCli! Memory saved from clearing: "dummy"bytes."
  260. return 0
  261.  
  262. fillspace:
  263. parse arg string
  264. y=length(string)
  265. dummy=''
  266. do j=1 to y
  267. dummy=dummy' '
  268. end
  269. return dummy
  270.  
  271. help:
  272. setprocess()
  273. clearance=getaxxs(nick)
  274. if clearance=0 then do
  275.  display("Sorry, you don't have access to this system.")
  276.  display("Please talk to "mynick" about getting access.")
  277.  return 0
  278. end
  279.   display("====================================")
  280.   display("= Commands for remotecli are:      =")
  281.   display("====================================")
  282.   display("= DIR         --- show current     =")
  283.   display("=                 directory        =")
  284.   display("= CD /        --- go up 1 dir      =")
  285.   display("= CD <dest>   --- change directory =")
  286.   display("= MORE <file> --- read a file      =")
  287.   display("= QUIT        --- stops remotecli  =")
  288.   display("=                 same as BREAK    =")
  289.   display("= SEND <file> --- this is how you  =")
  290.   display("=                 get what you     =")
  291.   display("=                 want             =")
  292.   display("= HELP        --- get this help    =")
  293.   display("====================================")
  294.   display("=   NOTE NOTE NOTE NOTE NOTE NOTE  =")
  295.   display("====================================")
  296.   display("= if you want to send anything     =")
  297.   display("= just do a normal dcc send to     =")
  298.   display("= "mynick)
  299.   display("====================================")
  300. return 0
  301.  
  302. makespace:
  303. parse arg x string
  304. do i=1 to x-1
  305. string=string' '
  306. end
  307. return string'='
  308.  
  309. quit:
  310. setprocess()
  311. display("Previous process aborted!")      /* it is setprocess */
  312. checkprocess()             /* and checkprocess that do the quitting */
  313. return 0
  314.  
  315. checkprocess:
  316.   test=getclip(nick'process')
  317.   if test~=currentprocess then do
  318.    exit
  319.   end
  320. return 0
  321.  
  322. more:
  323. currentdir=getclip(nick'cd')
  324. clearance=getaxxs(nick)
  325. if clearance=0 then do
  326.  setprocess()
  327.  display("Sorry, you don't have access to this system.")
  328.  display("Please talk to "mynick" about getting access.")
  329.  return 0
  330. end
  331. parse arg newtarget level .
  332. if level~="override" then do
  333.   setprocess()
  334.   parse var currentdir virtual':'rest
  335.   success=1
  336.   actualdir=virtuallookup(virtual':')
  337.   if actualdir='bogus' then success=0
  338.   realdir=actualdir||rest
  339.   if right(realdir,1)=':' | right(realdir,1)='/' then realfile=realdir||strip(newtarget)
  340.   else realfile=realdir||'/'||strip(newtarget)
  341.   if exists(realfile) then do
  342.     open('more_io',realfile,'r')
  343.     success=1
  344.   end
  345.   else success=0
  346.  end
  347. else open('more_io',newtarget,'r')
  348. if success=1 then do 
  349.   display("More of file "newtarget" started")
  350.   do until eof('more_io')
  351.     display(readln('more_io'))
  352.   end
  353.   display("More of file "target" finished")
  354.   close('more_io')
  355. end
  356. else  display("The file does not exist!")
  357. return 0
  358.  
  359. getaxxs:   /* get users security level */
  360. parse arg user .
  361. returncode=0
  362. USERHOST user
  363. umask=RESULT
  364. if open('f','s:remotecli.axxs','r') then do
  365.    do until eof('f')
  366.      input=readln('f')
  367.      parse var input item.axxs level mask .
  368.      parse var mask u1'@'crap1'.'mask1 .
  369.      parse var umask u2'@'crap2'.'mask2 .
  370.      if upper(item.axxs)=upper(user) & mask1=mask2 then do
  371.        close('f')
  372.        return level
  373.      end
  374.    end
  375.    close('f')
  376.   end
  377. else do
  378.  display("axxs file not set!")
  379. end
  380. close('f')
  381. return returncode
  382.  
  383. nicksecure:
  384. setprocess()
  385. parse arg whichnick option level .
  386. USERHOST whichnick
  387. mask=RESULT
  388. if upper(option)='ADD' then do
  389.   if exists('s:remotecli.axxs') then open('file_io','s:remotecli.axxs','a')
  390.   else open('file_io','s:remotecli.axxs','w')
  391.   writeln('file_io',whichnick' 'level' 'mask)
  392.   close('file_io')
  393.   display(whichnick" from host "mask" added at level "level)
  394. end
  395. else if upper(option)="REMOVE" then do
  396.   if exists('s:remotecli.axxs') then do 
  397.     open('file_io','s:remotecli.axxs','r')
  398.     open('file_temp','s:remotecli.axxs.tmp','w')
  399.     do until eof('file_io')
  400.       input=readln('file_io')
  401.       parse arg testnick level umask .
  402.       if upper(testnick)=upper(whichnick) then do
  403.         display(whichnick" from host "mask" removed.")
  404.       end
  405.       else writeln('file_temp',input)
  406.     end
  407.     close('file_io')
  408.     close('file_temp')
  409.     delete('s:remotecli.axxs')
  410.     rename('s:remotecli.axxs.tmp','s:remotecli.axxs')
  411.     display("Process finished.")
  412.   end
  413.   else display("You must add people first!")
  414. end
  415. else do
  416.   display("USAGE: /rc nick <usernick> <add/remove> <securitylevel>")
  417. end
  418. close('file_io')
  419. close('file_temp')
  420. return 0
  421.  
  422. matchdomain:
  423. parse arg domain1 domain2
  424. parse upper var domain1 u1'@'crap'.'domain1 .
  425. parse upper var domain2 u2'@'crap'.'domain2 .
  426. if u1=u2 & domain1=domain2 then return 1
  427. return 0
  428.  
  429. checkclearance:   
  430. /* return 1, for has axxs to dir, 0 for no access */
  431. /* cross reference userlevel against item's various seclevels that */
  432. /* are recording in an xxs file */
  433. parse arg user','userlevel','item .
  434. returncode=0
  435. if open('file_io','s:remotecli','r') then do
  436.   do until eof('file_io')
  437.     input=readln('file_io')
  438.     parse var input axxs.item axxs.level axxs.virtualdevice .
  439.     if axxs.level=userlevel & axxs.virtualdevice=item then do
  440.       returncode=1
  441.     end
  442.   end
  443.   close('file_io')
  444. end
  445. return returncode
  446.  
  447. virtuallookup:
  448. string='bogus'
  449. parse arg test.virtual .
  450. clearance=getaxxs(nick)
  451. if ~open('file_io','s:remotecli','r') then do
  452.     string='root'
  453.   end
  454. else do
  455.   do until eof('file_io')
  456.     input=readln('file_io')
  457.     parse var input axxs.item axxs.level axxs.virtual .
  458.     if upper(axxs.virtual)=upper(test.virtual) & clearance=axxs.level then do
  459.       string=axxs.item
  460.       leave
  461.     end
  462.   end
  463. end
  464. close('file_io')
  465. return string
  466.  
  467. directory:
  468. setprocess()
  469.   clearance=getaxxs(nick) /* clearance is level of user */
  470.   if clearance=0 then do
  471.    display("Sorry, you don't have access to this system.")
  472.    display("Please talk to "mynick" about getting access.")
  473.    return 0
  474.   end
  475.   currentdir=getclip(nick'cd')
  476.   parse arg target switches
  477.   brag()
  478.   if currentdir='root:' then do
  479.      display("Root: list started...")
  480.      if open('f','s:remotecli','r') then do   /* look at files & axxs */
  481.        do until eof('f')
  482.          input=readln('f')
  483.          parse var input item level virtualdevice .
  484.          if checkclearance(nick','clearance','virtualdevice) then display(virtualdevice)
  485.        end
  486.        close('f')
  487.      end
  488.      display("Root: list finished...")
  489.     end
  490.   else do
  491.     if substr(currentdir,length(currentdir),1)=":" then do
  492.       if ~checkclearance(nick','clearance','currentdir) then do
  493.          display("You don't have access to "currentdir)
  494.          return 0
  495.       end
  496.     end
  497.     parse var currentdir virtual':'rest .
  498.     actualdir=virtuallookup(virtual':')
  499.     currentdir=actualdir||rest
  500.     dirslist=showdir(currentdir,'d')
  501.     filelist=showdir(currentdir,'f')
  502.     do choose=1 to 2
  503.       select
  504.         when choose=1 then list=dirslist
  505.         when choose=2 then list=filelist
  506.       end
  507.       x=words(list)
  508.       do i=1 to x
  509.         item=word(list,i)
  510.         if choose=1 then do 
  511.            item=item'/'
  512.            display(item)
  513.         end
  514.         if choose=2 then do
  515.        if right(currentdir,1)=':' | right(currentdir,1)='/' then
  516.                info=statef(currentdir||item)
  517.            else
  518.            info=statef(currentdir||'/'||item)
  519.        parse var info crap bytes crap .
  520.        formatstring=" "
  521.        formatstring=overlay(item,formatstring,1,length(item),' ')
  522.            formatstring=overlay(bytes,formatstring,25,length(bytes),' ')
  523.        formatstring=overlay('bytes',formatstring,33,5,' ')
  524.            display(formatstring)
  525.         end
  526.       end
  527.     end
  528.   end
  529.   display("Directory List Finished!")
  530. return 0
  531.  
  532. sendfile:
  533. setprocess()
  534. currentdir=getclip(nick'cd')
  535. clearance=getaxxs(nick)
  536. if clearance=0 then do
  537.   display("Sorry, you don't have access to this system.")
  538.   display("Please talk to "mynick" about getting access.")
  539.   return 0
  540. end
  541. parse arg target
  542. target=strip(target)
  543. brag()
  544. filename=currentdir||target
  545. parse var filename virtual':'filename
  546. actualdir=virtuallookup(virtual':')
  547. if right(actualdir,1)=':' | right(actualdir,1)='/' then realfileame=actualdir||filename
  548. else realfilename=actualdir||'/'||filename
  549. if exists(realfilename) then do
  550.  display("File: "target" is now being sent to you")
  551.  display("Please initiate your dcc receive")
  552.  "say /DCC SEND "nick realfilename
  553. end
  554. else do
  555. display("File: "target" does not exist")
  556. display("Please check your spelling & location")
  557. end
  558. return 0
  559.  
  560. changedir:                        
  561. setprocess()
  562.  clearance=getaxxs(nick)
  563.  if clearance=0 then do
  564.    display("Sorry, you don't have access to this system.")
  565.    display("Please talk to "mynick" about getting access.")
  566.    return 0
  567.  end
  568.  currentdir=getclip(nick'cd')        /* get current directory    */
  569.  parse var currentdir virtual':'currentdir . /* pull out virtual device  */
  570.  saverest=currentdir                  /* reuse of currentdir is too high */
  571.                       /* so we save it's contents */
  572.  virtual=virtual':'
  573.  parse arg target                    /* what are cd'ing to       */
  574.  target=strip(target)                /* get rid of those blanks  */
  575.  test.cd=0                 /* initialize slash counter */
  576.  do i=1 to length(target)        
  577.    if substr(target,i,1)='/' then    /* count slashes in target  */
  578.     test.cd=test.cd+1
  579.  end                     /* test.cd = how many times we */
  580.                       /* must cd up    */
  581.  root.dir=''                 /* initialize check for root cd */
  582.  if substr(target,length(target),1)=':' then
  583.    root.dir='yes'             /* we have a request to change */
  584.  brag()
  585.  temp.l=length(currentdir)           /* find out length of current dir */
  586.  if root.dir='yes' then do           /* handle requests for virtual devices */
  587.    if upper(target)~='ROOT:' then do
  588.        clearance=getaxxs(nick)
  589.        if checkclearance(nick','clearance','target) then do
  590.           currentdir='target'
  591.           setclip(nick'cd',target)
  592.           display("Directory set to "target)
  593.           return 0
  594.        end
  595.        else do
  596.          display("You don't have access to "target)
  597.          return 0
  598.        end
  599.    end
  600.    else do 
  601.       currentdir=''
  602.       setclip(nick'cd','root:')
  603.       display("Directory set to "target)
  604.       return 0
  605.    end
  606.  end
  607.  if test.cd~=0 then do              /* handle requests for cd ups */
  608.   test.temp=0
  609.   shittemp=currentdir
  610.   do forever
  611.     parse var shittemp test.test'/'rest .
  612.     if rest='' & test.test='' then leave
  613.     test.temp=test.temp+1
  614.     shittemp=rest
  615.   end
  616.   if test.temp=0 & test.test='' then do
  617.     currentdir=''
  618.     setclip(nick'cd','root:')
  619.     display("Directory set to root:")
  620.     return 0
  621.   end
  622.   if test.temp=0 & test.cd=1 then do
  623.     currentdir=''
  624.     setclip(nick'cd',virtual)
  625.     display("Directory set to "virtual)
  626.     return 0
  627.   end
  628.   if test.temp=0 & test.cd>1 then do
  629.     currentdir=''
  630.     setclip(nick'cd','root:')
  631.     display("Directory set to root:")
  632.     return 0
  633.   end
  634.   if test.temp>0 & test.cd>0 then do
  635.    if test.cd>test.temp+1 then do
  636.      currentdir=''
  637.      setclip(nick'cd','root:')
  638.      display("Directory set to root:")
  639.      return 0
  640.    end
  641.    if test.cd=test.temp then do
  642.      currentdir=''
  643.      setclip(nick'cd',virtual)
  644.      display("Directory set to "virtual)
  645.      return 0
  646.    end
  647.    if test.cd<test.temp then do
  648.      test.currentdir=reverse(currentdir)
  649.      test.newdir=''
  650.      do i=1 to test.cd
  651.        parse var test.currentdir crap'/'test.currentdir
  652.      end
  653.      currentdir=virtual||reverse(test.currentdir)
  654.      setclip(nick'cd',currentdir)
  655.      display("Directory set to "currentdir)
  656.      return 0
  657.    end
  658.   end
  659.  end
  660.  /* handle remainder of target */
  661.  actualdir=virtuallookup(virtual)
  662.  currentdir=saverest
  663.  if right(currentdir,1)='/' | right(currentdir,1)=':' then
  664.     testdir=actualdir||currentdir||target
  665.  else
  666.     if currentdir='' then testdir=actualdir||target
  667.     else testdir=actualdir||currentdir||'/'||target
  668.  if showdir(testdir)='' & ~exists(testdir) then do
  669.    currentdir=virtual||currentdir
  670.    setclip(nick'cd',currentdir)
  671.    display("Directory not valid!")
  672.    display("Directory remains at "currentdir)
  673.   end
  674. else do
  675.   if right(currentdir,1)='/' | right(currentdir,1)=':' then
  676.      currentdir=virtual||currentdir||target
  677.   else
  678.      if currentdir='' then currentdir=virtual||target
  679.      else currentdir=virtual||currentdir||'/'||target
  680.   setclip(nick'cd',currentdir)
  681.   display("Directory set to "currentdir)
  682. end
  683. return 0  
  684.  
  685. display:
  686.  
  687.   parse arg string
  688.   checksend()
  689.   if upper(nick)~=upper(mynick) & upper(nick)~="LOCAL" then do
  690.       "RAW PRIVMSG "nick" :"d2c(2)"!RemoteCli!"d2c(2) string
  691.      if getclip(nick'ctcp')~='on' then
  692.       delay(30)   
  693.   end
  694.   setclip(sending)
  695.   lecho(string)
  696.  
  697. return 0
  698.  
  699. lecho:
  700.   parse arg string
  701.   checksend()
  702.   lnick=nick
  703.   if upper(nick)=upper(mynick) then lnick='LOCAL'
  704.   if getclip('localecho')='on' | upper(nick)=upper(mynick) then
  705.   "echo P="d2c(27)"b!RemoteCli! ["lnick"]"string
  706.   delay(30)
  707.   setclip(sending)
  708. return 0
  709.  
  710. checksend:
  711.  checkprocess()
  712. b=0
  713. c=getclip(server)
  714. c=c+1
  715. do forever
  716.    b=b+1
  717.    sendit=getclip(sending)
  718.    if sendit='' then do
  719.       setclip(sending,nick)
  720.       leave
  721.    end
  722.    if b=25 then do
  723.       setclip(sending,'')
  724.    end
  725. end
  726. if getclip(nick'ctcp')~='on' then do
  727.   if c>9 then do
  728.      c=0
  729.      delay(100)
  730.   end
  731. setclip(server,c)
  732. end
  733. return 0
  734.  
  735. switchhelp:
  736. setprocess()
  737.  lecho("------------------------------------------------")
  738.  lecho("- Welcome to REMOTE CLI by DUDE3K              -")
  739.  lecho("------------------------------------------------")
  740.  lecho("- Switches are:                                -")
  741.  lecho("-                                              -")
  742.  lecho("-    HELP   --- Coughs up this                 -")
  743.  lecho("-               help                           -")
  744.  lecho("- ECHO ON   --- local echo on                  -")
  745.  lecho("-      OFF      or off                         -")
  746.  lecho("- SET <dir> --- set a default                  -")
  747.  lecho("-               directory for                  -")
  748.  lecho("-               scanning.                      -")
  749.  lecho("- NICK <username> <add/remove> <securitylevel> -")
  750.  lecho("-           --- self explanatory               -")
  751.  lecho("-   CLEAR   --- clears out all                 -")
  752.  lecho("-               vars created by                -")
  753.  lecho("-               RemoteCli                      -")
  754.  lecho("-    STAT   --- Show all vars                  -")
  755.  lecho("- INSTALL   --- Install RemoteCli              -")
  756.  lecho("- End of help                                  -")
  757.  lecho("------------------------------------------------")
  758. return 0
  759.  
  760. localecho:
  761. setprocess()
  762. parse upper arg test .
  763. select
  764.    when test='OFF' then do
  765.        setclip('localecho','on')
  766.        lecho("Local Echo is now OFF!")
  767.        setclip('localecho','off')
  768.    end
  769.    when test='ON' then do
  770.        setclip('localecho','on')
  771.        lecho("Local Echo is now ON!")
  772.    end
  773.    otherwise nop
  774. end
  775. return 0
  776.  
  777. brag:
  778.     lecho("User "nick" has entered the system!")
  779.     display("Welcome to "mynick"'s CLI via REMOTECLI by DUDE3K")
  780. return 0
  781.  
  782.  
  783.  
  784. install:
  785. parse upper arg option .
  786. setprocess()
  787. if ~exists('rexx/remotecli.amirx') then do
  788.     lecho("You do not have remotecli.amirx")
  789.         lecho("Please put remotecli.amirx")
  790.         lecho("in the amirc/rexx directory")
  791.     lecho("Then try the install again.")
  792.         return 0
  793. end
  794. if ~exists('default.amircfg') then do
  795.     lecho("For some reason you don't have")
  796.         lecho("default settings file.")
  797.         lecho("Please, use save as defaults to")
  798.     lecho("create one.")
  799.     lecho("The try the install again.")
  800.     return 0
  801. end
  802. open('da','default.amircfg','r')
  803. open('t','temp','w')
  804. setclip(alias,'notdone')
  805. do until eof('da')
  806.   input=readln('da')
  807.   parse var input sect1' '.
  808.   select
  809.     when upper(sect1)='ALIAS' & getclip(alias)='notdone' then makealias(option'::'input)
  810.     when upper(sect1)='EVENT_CTCP' then makectcp(option'::'input)
  811.     when upper(sect1)='EVENT_PRIV' then makepriv(option'::'input)
  812.     otherwise makedoody(input)
  813.   end
  814. end
  815. close('da')
  816. close('t')
  817. open('us','s:user-startup','a')
  818. writeln('us',';BEGIN REMOTECLI IN RAM')
  819. writeln('us','copy rexx:remotecli.amirx ram:')
  820. writeln('us',';END REMOTECLI IN RAM')
  821. address command 'copy rexx/remotecli.amirx rexx:'
  822. close('us')
  823. delete('default.amircfg')
  824. rename('temp','default.amircfg')
  825. lecho("Please do /rc help for local help")
  826. lecho("Tell your fiends to use /msg "mynick" help for remote help")
  827. lecho("Also inform them to use the commands in the format of")
  828. lecho("/msg "mynick" <command> <options>")
  829. lecho("INSTALLATION ALL DONE.")
  830. lecho("Please reload your configuration from default to activate.")
  831. return 0
  832.  
  833. makealias:
  834. parse arg option'::'crap
  835.      writeln('t',crap)
  836.      if option='RAM' then writeln('t','ALIAS rc /rx ram:remotecli %p')
  837.      else writeln('t','ALIAS rc /rx rexx/remotecli %p')
  838.      setclip(alias,'done')
  839.      lecho("Alias /rc added to system")
  840. return 0
  841.  
  842. makectcp:
  843.      parse arg option'::'rest
  844.      rest=strip(rest)
  845.      rest=reverse(rest)
  846.      x=pos(',',rest)
  847.      firstpart=substr(rest,x)
  848.      firstpart=reverse(firstpart)
  849.      if option='RAM' then firstpart=firstpart'ram:remotecli.amirx CTCP %p'
  850.      else firstpart=firstpart'rexx/remotecli.amirx CTCP %p'
  851.      writeln('t',firstpart)
  852.      lecho("CTCP EVENT SET")
  853. return 0
  854.  
  855. makepriv:
  856.      parse arg option'::'rest
  857.      rest=strip(rest)
  858.      rest=reverse(rest)
  859.      x=pos(',',rest)
  860.      firstpart=substr(rest,x)
  861.      firstpart=reverse(firstpart)
  862.      if option='RAM' then firstpart=firstpart'ram:remotecli.amirx %p'
  863.      else firstpart=firstpart'rexx/remotecli.amirx %p'    
  864.      writeln('t',firstpart)
  865.      lecho("PRIVMSG EVENT SET")
  866. return 0
  867.  
  868. makedoody:
  869. parse arg crap
  870.      writeln('t',crap)
  871. return 0
  872.  
  873. FAILURE:
  874. ERROR:
  875. IOERR:
  876. SYNTAX:
  877. "echo P="d2c(27)"b!ERROR! ON LINE #"sigl
  878. "echo P="d2c(27)"b!ERROR! CODE #"rc 
  879. "echo P="d2c(27)"b!ERROR! DESCRIPTION:"errortext(rc)
  880. exit
  881.  
  882.